/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: LIUYANJIAO
 * Date: 2024-12-08
 * Time: 14:53
 */
public class Main {

       //创建二叉树节点
       static class node{
           char val;
           node left;
           node right;

           //构建方法
           public node(char val) {
               this.val = val;
           }
       }

       public static void cousins(node root){
          if(root.left==null) return;
          cousins(root.left);
           if(root.right==null) return;
          cousins(root.right);

           if(root.left.left==null||root.right.left==null) return;
           //讨论情况
           //左右最少有一个节点，所以现在讨论
           //1.左一个右一个
           if(root.left.right==null&&root.right.right==null){
               System.out.println(root.left.left.val+" 和 "+root.right.left.val+"是堂兄弟");
           }
           //2.左两个右一个
           else if (root.right.right==null){
               System.out.println(root.left.left.val+" 和 "+root.right.left.val+"是堂兄弟");
               System.out.println(root.left.right.val+" 和 "+root.right.left.val+"是堂兄弟");
           }
           //左一个右两个
           else if(root.left.right==null){
               System.out.println(root.left.left.val+" 和 "+root.right.left.val+"是堂兄弟");
               System.out.println(root.left.left.val+" 和 "+root.right.right.val+"是堂兄弟");
           }
           //左两个右两个
           else {
               System.out.println(root.left.left.val+" 和 "+root.right.left.val+"是堂兄弟");
               System.out.println(root.left.right.val+" 和 "+root.right.left.val+"是堂兄弟");
               System.out.println(root.left.left.val+" 和 "+root.right.right.val+"是堂兄弟");
               System.out.println(root.left.right.val+" 和 "+root.right.right.val+"是堂兄弟");
           }
           return;
       }
       public static void main(String[] args) {
           //node表示题中的任务对象
           node a=new node('a');
           node b=new node('b');
           node c=new node('c');
           node d=new node('d');
           node e=new node('e');
           node f=new node('f');
           node g=new node('g');
           node h=new node('h');
           //用二叉树表示题中的父子关系

           //a是b c的父亲
           a.left=b;
           a.right=c;
           //b是d e的父亲
           b.left=d;
           b.right=e;
           //c是f的父亲
           c.left=f;
           //d是g的父亲
           d.left=g;
           //e是h的父亲
           e.left=h;

           //找堂兄弟关系
           cousins(a);

   }
}